package main

import (
	"fmt"
)

// go采用defer-recover来捕获异常
func exception() {
	defer func() {
		err := recover()
		if err != nil{
			fmt.Println("有异常", err)
			return
		}
	}()
	doException()
}

func doException() {
	//file, err := os.Open("E:\\a.go")
	//fmt.Println(file, err)
	m := 2
	n := 0
	res := m/n
	fmt.Println(res)
}

// 自定义错误
//errors.New("错误说明") 返回一个error类型的值，表示一个错误
//panic内置函数，接收一个interface{}类型的值（即所有值）作为参数，可以接受error类型的变量，输出错误信息并退出程序【类似Python中的raise】
//err := errors.New("错误说明")
//panic(err)

func main() {
	exception()
	fmt.Println("主函数")
}